package com.mmall.Concurrency.example.ThreadLocal;

//存希望绑定在该线程上的信息
public class RequestHolder {

    //long值单纯是线程信息的id
    private final static ThreadLocal<Long>  requestHolder = new ThreadLocal<>();
    //map 维护多个线程和对象对

    //请求进入后端服务器但是未实际处理
    //filter揽住对应URL，Filter把相关信息写到ThreadLocal里面
    //URL实际被处理时，则从ThreadLocal里面取信息
    public static void add(Long id){
        requestHolder.set(id);  //会取出当前线程的id  ，map中key为当前线程的变量，value为当前传入的Long型变量
    }

    public static Long getId(){
        return requestHolder.get();
    }

    //接口被处理完之后处理
    public static void remove(){  //否则内存泄露
        requestHolder.remove();
    }
}
